package work.mediway.mdm.biz.service.patient;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

import work.mediway.mdm.core.page.QueryRequest;
import work.mediway.mdm.biz.vo.patient.SuspectPatientDetailVO;
import work.mediway.mdm.biz.vo.patient.SuspectPatientListVO;
import work.mediway.mdm.biz.dto.patient.PatientSuspectDTO;
import work.mediway.mdm.biz.entity.patient.PaSuspectPatient;

/**
 * @author zhongyj <1126834403@qq.com><br/>
 * @date 2020/12/21
 */
public interface PaSuspectPatientService extends IService<PaSuspectPatient> {

    /**
     * 查询相似患者列表
     *
     * @param suspectDTO   PatientSuspectDTO
     * @param queryRequest QueryRequest
     * @return Page<SuspectPatientVO>
     */
    Page<SuspectPatientListVO> pageSuspectPatient(PatientSuspectDTO suspectDTO, QueryRequest queryRequest);

    /**
     * 查询相似关联患者
     *
     * @param patPatientId String
     * @return Page<SuspectPatientDetailVO>
     */
    List<SuspectPatientDetailVO> suspectPatientDetail(String patPatientId);

    /**
     * 计算患者的相似度
     * 结果至少包括两条数据，即分别作为主患者和次患者
     * 还应该包括主患者和次患者的信息
     *
     * @param majorPatPatientId  主患者平台Id
     * @param minorPatPatientIds 次患者平台id,可以有多个，如果为空，则查询该主患者的所有相似患者
     * @return 计算结果列表
     */
    List<PaSuspectPatient> computeSuspect(String majorPatPatientId, String minorPatPatientIds);

    /**
     * 存储计算好的相似患者
     *
     * @param suspectPatients 相似患者结果
     */
    void saveSuspect(List<PaSuspectPatient> suspectPatients);

}
